package com.example.cardgame.model

// 定义 CardMatchingGame 类，表示卡片匹配游戏
class CardMatchingGame(count: Int)  {
    // 游戏得分，私有设置
    var score = 0
        private set

    // 卡片列表
    private val cards: MutableList<Card>

    // 初始化块，创建一副牌并抽取指定数量的卡片
    init {
        val deck = Deck()
        cards = mutableListOf()
        for (i in 1..count) {
            val card: Card? = deck.drawRandomCard()
            if (card != null) {
                cards.add(card)
            }
        }
    }

    // 根据索引获取卡片
    fun cardAtIndex(index: Int): Card {
        return cards.get(index)
    }

    // 常量定义
    val MISMATCH_PENALTY = 2
    val MATCH_BONUS = 8
    val COST_TO_CHOOSE = 1

    // 选择指定索引的卡片
    fun chooseCardAtIndex(index: Int) {
        val card= cardAtIndex(index)
        if (!card.isMatched) {// 如果卡片未匹配
            if (card.isChosen) {// 如果卡片已选择
                card.isChosen = false// 取消选择
            } else {// 如果卡片未选择
                for (otherCard in cards) {// 遍历所有卡片
                    if (otherCard.isChosen && !otherCard.isMatched) {   // 是否有另一张未匹配的卡片
                        val matchScore = card.match(arrayOf(otherCard)) // 匹配得分
                        if (matchScore > 0) {   // 匹配成功
                            score += matchScore * MATCH_BONUS   // 加分
                            otherCard.isMatched = true// 标记为已匹配
                            card.isMatched = true// 标记为已匹配
                        } else {
                            score -= MISMATCH_PENALTY   // 匹配失败，扣分
                            otherCard.isChosen = false  // 另一张卡片取消选择
                        }
                        break
                    }
                }
                score -= COST_TO_CHOOSE // 每次选择卡片都会扣分
                card.isChosen = true    // 标记为已选择
            }
        }
    }
}